/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package proyectoempresa.modelo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.ManyToMany;
import javax.persistence.OneToOne;
import org.hibernate.annotations.Cascade;

/**
 *
 * @author Diego
 */
@Entity
public class Factura extends Cliente implements Serializable {

    @Column
    protected String fecha;
    @Column(columnDefinition = "varchar(20)", nullable = true)
    protected String descuento;
    @Column(columnDefinition = "varchar(20)", nullable = true)
    protected String subtotal;
    @Column(columnDefinition = "varchar(20)", nullable = true)
    protected String total_pagar;
    @Column(columnDefinition = "varchar(20)", nullable = true)
    protected String  abono = "0";
    @Column(columnDefinition = "varchar(20)", nullable = true)
    protected String tipopago="CONTADO";
    @Column(columnDefinition = "varchar(20)", nullable = true)
    protected String Cambio;
     @Column(columnDefinition = "varchar(20)", nullable = true)
    protected String efectivo;
    protected String totaLetras;



    @ManyToMany(mappedBy = "facturas", cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE})
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private List<Lineafactura> lineasfac;
    @OneToOne
    private Inventario inventario;

    public Factura(String nombresCliente, String direccion, String telefono, String cedula, String fecha) {
        this.nombresCliente = nombresCliente;
        this.direccion = direccion;
        this.telefono = telefono;
        this.cedula = cedula;
        this.fecha = fecha;
        this.fecha = fecha;
        lineasfac = new ArrayList<Lineafactura>();
    }

    public String getTotaLetras() {
        return totaLetras;
    }

    public void setTotaLetras(String totaLetras) {
        this.totaLetras = totaLetras;
    }
    

    public Inventario getInventario() {
        return inventario;
    }

    public void setInventario(Inventario inventario) {
        this.inventario = inventario;
    }

    public Factura() {
        lineasfac = new ArrayList<Lineafactura>();
    }

    public String getDescuento() {
        return descuento;
    }


    public String getAbono() {
        return abono;
    }

    public void setAbono(String abono) {
        this.abono = abono;
    }

    public void setDescuento(String descuento) {
        this.descuento = descuento;
    }

    public String getSubtotal() {
        return subtotal;
    }

    public void setSubtotal(String subtotal) {
        this.subtotal = subtotal;
    }

    public String getTotal_pagar() {
        return total_pagar;
    }

    public void setTotal_pagar(String total_pagar) {
        this.total_pagar = total_pagar;
    }

    public String getTipopago() {
        return tipopago;
    }

    public void setTipopago(String tipopago) {
        this.tipopago = tipopago;
    }

    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

    public String getEfectivo() {
        return efectivo;
    }

    public void setEfectivo(String efectivo) {
        this.efectivo = efectivo;
    }

    public List<Lineafactura> getLineasfac() {
        return lineasfac;
    }

    public void setLineasfac(List<Lineafactura> lineasfac) {
        this.lineasfac = lineasfac;
    }

    public void agregar(Lineafactura il) {
        if ((il != null) && !lineasfac.contains(il)) {
            lineasfac.add(il);

        }
    }

    public void remover(Lineafactura il) {
        if (lineasfac.contains(il)) {
            lineasfac.remove(il);

        }
    }

    public Double descuentoReal() {
        Double total = 0.0;
        for (Lineafactura lineafactura : lineasfac) {
            total = total +(lineafactura.getDescuento()*((lineafactura.getPrecioUnitario()*lineafactura.getCantidad())+Double.valueOf(lineafactura.getIva())));
        }
        return total;
    }

    public Double subTotal() {
        Double sub = 0.0;
        Double sub1 = 0.0;
        for (Lineafactura lineafactura : lineasfac) {
            sub = sub + lineafactura.getPrecioTotal();
        }
        sub1 = sub - this.descuentoReal();
        return sub1;
    }

    public Double obtenercambio(Double valor) {
        if (valor>this.subTotal()) {
            return valor - this.subTotal();
        }else{
        return 0.0;
        }
        
    }

    public String getCambio() {
        return Cambio;
    }

    public void setCambio(String Cambio) {
        this.Cambio = Cambio;
    }

    @Override
    public String toString() {
        return "Factura{" + "fecha=" + fecha + "descuento=" + descuento + "subtotal=" + subtotal + "total_pagar=" + total_pagar + "abono=" + abono + "tipopago=" + tipopago + "Cambio=" + Cambio + "lineasfac=" + lineasfac + "inventario=" + inventario + '}';
    }



   
    public Double getIva(Double d){
    Double iva=0.0;
    iva= (d*12)/100;
    return iva;
    }
//  public Double getTotal(){
//    Double total=0.0;
//    total= this.+this.getIva();
//    return total;
//    }
}
